home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / Aminet / comm / tcp / Socks5.lha / Socks5 / src / include / sigfix.h < prev    next >
C/C++ Source or Header  |  1999-03-10  |  2KB  |  98 lines

  1. /* Copyright (c) 1995-1999 NEC USA, Inc.  All rights reserved.               */
  2. /*                                                                           */
  3. /* The redistribution, use and modification in source or binary forms of     */
  4. /* this software is subject to the conditions set forth in the copyright     */
  5. /* document ("Copyright") included with this distribution.                   */
  6.  
  7. /*
  8.  * $Id: sigfix.h,v 1.7.4.2 1999/02/03 22:34:53 steve Exp $
  9.  */
  10.  
  11. #ifndef SIGFIX_H
  12. #define SIGFIX_H
  13.  
  14. typedef RETSIGTYPE (*Sig_t)P((void));
  15.  
  16. #ifdef HAVE_SIGACTION
  17. typedef sigset_t Sigset_t;
  18.  
  19. #ifndef DONT_NEED_SIGNAL
  20. static inline Sig_t Signal(int signo, RETSIGTYPE(*func)()) {
  21.     struct sigaction sa, oa;
  22.  
  23.     sa.sa_flags   = 0;
  24.     sa.sa_handler = func;
  25.     sigemptyset(&sa.sa_mask);
  26.     sigaction(signo, &sa, &oa);
  27.     return (Sig_t)oa.sa_handler;
  28. }
  29. #endif
  30.  
  31. #ifndef DONT_NEED_SIGBLOCK
  32. static inline Sigset_t SigBlock(int signo) {
  33.     sigset_t set;
  34.     sigemptyset(&set);
  35.     sigaddset(&set, signo);
  36.     sigprocmask(SIG_BLOCK, &set, NULL);
  37.  
  38.     return set;
  39. }
  40. #endif
  41.  
  42. #ifndef DONT_NEED_SIGUNBLOCK
  43. static inline void SigUnblock(Sigset_t set) {
  44.     sigprocmask(SIG_UNBLOCK, &set, NULL);
  45. }
  46. #endif
  47.  
  48. #ifndef DONT_NEED_SIGPAUSE
  49. static inline void SigPause(void) {
  50.     sigset_t set;
  51.     sigemptyset(&set);
  52.     sigsuspend(&set);
  53. }
  54. #endif
  55.  
  56. #ifndef DONT_NEED_SIGPENDING
  57. static inline int SigPending(int signo) {
  58.     sigset_t set;
  59.     sigemptyset(&set);
  60.     sigpending(&set);
  61.     return sigismember(&set, signo);
  62. }
  63. #endif
  64. #else
  65. typedef int Sigset_t;
  66.                
  67. #ifndef DONT_NEED_SIGNAL
  68. static inline Sig_t Signal(int signo, RETSIGTYPE(*func)()) {
  69.     return (Sig_t)signal(signo, func);
  70. }
  71. #endif
  72.  
  73. #ifndef DONT_NEED_SIGBLOCK
  74. static inline Sigset_t SigBlock(int signo) {
  75.     return sigblock(signo);
  76. }
  77. #endif
  78.  
  79. #ifndef DONT_NEED_SIGUNBLOCK
  80. static inline void SigUnblock(Sigset_t mask) {
  81.     sigsetmask(mask);
  82. }
  83. #endif
  84.  
  85. #ifndef DONT_NEED_SIGPAUSE
  86. static inline void SigPause(void) {
  87.     sigpause(0);
  88. }
  89. #endif
  90.  
  91. #ifndef DONT_NEED_SIGPENDING
  92. static inline int SigPending(int signo) {
  93.      return 0;
  94. }
  95. #endif
  96. #endif    
  97. #endif
  98.